JavaScript Primer 関数と宣言
https://gyazo.com/51ccf23737c36fe563a7c90cb8c3b2e0
読書メモ
何も返さない場合,undifined返す.
呼び出し時の引数が少ないとき → 余った仮引数にundifinedが代入される
呼び出し時の引数が多いとき → あふれた引数は単純に無視される
argumentsという特殊な変数を利用
code:js
function fn(...args) {
// argsは引数の値が順番に入った配列
}
fn("a", "b", "c");
code:js
function fn(x, y, z) {
console.log(x); // => 1
console.log(y); // => 2
console.log(z); // => 3
}
// Spread構文で配列を引数に展開して関数を呼び出す
fn(...array);
// 次のように書いたのと同じ意味
fn(array0, array1, array2); 関数に渡された引数の値がすべて入ったArray-likeなオブジェクト
使う理由はない
Arrayのメソッドは利用できない
関数が可変長引数を受けつけるのかを仮引数だけを見て判断できなくなる
code:js
// 第1引数のオブジェクトからidプロパティを変数idとして定義する
function printUserId({ id }) {
console.log(id); // => 42
}
const user = {
id: 42
};
printUserId(user);
関数はオブジェクト
functionキーワードの右辺に書く関数名は省略可能
code:js
// 関数式
const 関数名 = function() {
// 関数を呼び出したときの処理
// ...
return 関数の返り値;
};
関数名をしない記法 → 再帰関数に利用される
code:js
// factorialは関数の外から呼び出せる名前
// innerFactは関数の外から呼び出せない名前
const factorial = function innerFact(n) {
if (n === 0) {
return 1;
}
// innerFactを再帰的に呼び出している
return n * innerFact(n - 1);
};
console.log(factorial(3)); // => 6
名前をつけることができない
thisが静的に決定できる
arguments変数を参照できない
人による解釈や実装の違いが生まれにくくなる
newできない
できるだけArrow Functionで記述する.
引数として渡される関数のこと
非同期処理でよく使われる
コールバック関数を引数として使う関数やメソッド
関数を返す関数
code:js
function 高階関数(コールバック関数) {
コールバック関数();
}
code:js
# 高階関数 forEachの例
array.forEach((value) => {
console.log(value);
});